With reference to FIG. 1, an example of a two-dimensional (2) matrix symbol is a DataMatrix symbol 10, which typically includes a data area 12 having a plurality of data “modules” arranged in a two-dimensional matrix, the data area 12 being bound on two sides by a finder pattern 14, and on two opposite sides by a timing pattern 16. Each data module of the data area 12 can be a square, a rectangle, or a circle, for example. Each data module is a solid 2-D region of either positive polarity (e.g., black), or negative polarity (e.g., white), the polarity representing a data value of 1 or 0, for example. The DataMatrix symbol 10 also includes a “quiet zone” 18 surrounding the finder pattern 14 and the timing pattern 16, which together surround the data area 12. The timing pattern 16 is used to determine the extent of the symbol, and to estimate the number of rows and columns in the symbol.
FIG. 1 illustrates the structure of an ECC200 dark-on-light DataMatrix symbol. The finder pattern 14 of the DataMatrix symbol 10 consists of a plurality of contiguous ideally square modules that form a continuous L-shaped boundary. The Reference Decode Algorithm for the DataMatrix code (ISO/IEC2000: 16022, Information technology—International symbology specification—Data matrix) can be used to locate candidate areas that may contain an “L” shaped finder pattern.
2D matrix symbols are used for tracking objects during transit, storage, or for any object identification purpose. Such symbols can be printed on the object, or can be stamped or otherwise impressed into the surface of an object, such as a malleable object, e.g., a plastic or metal object. One method of stamping a 2D matrix symbol into a metal surface uses a plurality of “peens”, i.e., round objects that each forms a round depression (dot) in the surface of the metal.
With reference to FIG. 2B, when attempting to read a 2D matrix symbol 20 that is dot-peened onto a metal surface 22, the acquired image may present individual modules as rings or “donuts”, with the center of each ring having a value (black or white) that is the opposite of the actual intended value of the module. Thus, each distorted module does not reliably represent the data value of the corresponding module of the original 2D matrix symbol. This type of image distortion of a 2D matrix symbol is referred to herein as the “donut effect”. Depending on the physical depth of the dots of the symbol 20 peened on the metal surface 22, and the illumination set up for viewing the metal surface 22, the radii of the inner circle can vary to such an extent that conventional decoding algorithms fail to correctly read the code. “Donut effects” can also result when a code is marked on metal and then covered with paint, which changes the appearance of the modules due to the build-up of paint caught in the basin of each peened module of the symbol, thereby changing the polarity of at least some of the modules.